{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Linear Support Vector Machine: Soft Margin\n",
    "----------------------------------\n",
    "\n",
    "This function shows how to use TensorFlow to create a soft margin SVM\n",
    "\n",
    "We will use the iris data, specifically:\n",
    "\n",
    "$x_1 =$ Sepal Length\n",
    "\n",
    "$x_2 =$ Petal Width\n",
    "\n",
    "Class 1 : `I. setosa`\n",
    "\n",
    "Class -1: `not I. setosa`\n",
    "\n",
    "We know here that x and y are linearly seperable for I. setosa classification.\n",
    "\n",
    "\n",
    ">Note that we implement the soft margin with an allowable margin of error for points.  The margin of error term is given by 'alpha' below.  To behave like a hard margin SVM, set alpha = 0. (in notebook code block #7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from sklearn import datasets\n",
    "from tensorflow.python.framework import ops\n",
    "ops.reset_default_graph()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set a random seed and start a computational graph."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "np.random.seed(42)\n",
    "tf.set_random_seed(42)\n",
    "sess = tf.Session()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Load the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# iris.data = [(Sepal Length, Sepal Width, Petal Length, Petal Width)]\n",
    "iris = datasets.load_iris()\n",
    "x_vals = np.array([[x[0], x[3]] for x in iris.data])\n",
    "y_vals = np.array([1 if y == 0 else -1 for y in iris.target])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Split data into train/test sets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train_indices = np.random.choice(len(x_vals),\n",
    "                                 round(len(x_vals)*0.8),\n",
    "                                 replace=False)\n",
    "test_indices = np.array(list(set(range(len(x_vals))) - set(train_indices)))\n",
    "x_vals_train = x_vals[train_indices]\n",
    "x_vals_test = x_vals[test_indices]\n",
    "y_vals_train = y_vals[train_indices]\n",
    "y_vals_test = y_vals[test_indices]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set model parameters, placeholders, and coefficients."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Declare batch size\n",
    "batch_size = 120\n",
    "\n",
    "# Initialize placeholders\n",
    "x_data = tf.placeholder(shape=[None, 2], dtype=tf.float32)\n",
    "y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)\n",
    "\n",
    "# Create variables for SVM\n",
    "A = tf.Variable(tf.random_normal(shape=[2, 1]))\n",
    "b = tf.Variable(tf.random_normal(shape=[1, 1]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Declare our model and L2 Norm\n",
    "\n",
    "SVM linear model is given by the equation:\n",
    "\n",
    "$$\\left[ \\frac{1}{n} \\sum_{i=1}^{n} \\max(0, 1 - y_i(A \\cdot x + b)) \\right] + \\alpha \\cdot ||A||^{2}$$\n",
    "\n",
    "Our loss function will be the above quantity and we will tell TensorFlow to minimize it. Note that $n$ is the number of points (in a batch), $A$ is the hyperplane-normal vector (to solve for), $b$ is the hyperplane-offset (to solve for), and $\\alpha$ is the soft-margin parameter."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Declare model operations\n",
    "model_output = tf.subtract(tf.matmul(x_data, A), b)\n",
    "\n",
    "# Declare vector L2 'norm' function squared\n",
    "l2_norm = tf.reduce_sum(tf.square(A))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here we make our special loss function based on the classification of the points (which side of the line they fall on).\n",
    "\n",
    "Also, note that `alpha` is the soft-margin term and an be increased to allow for more erroroneous classification points.  For hard-margin behaviour, set `alpha = 0`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Declare loss function\n",
    "# Loss = max(0, 1-pred*actual) + alpha * L2_norm(A)^2\n",
    "# L2 regularization parameter, alpha\n",
    "\n",
    "alpha = tf.constant([0.01])\n",
    "\n",
    "# Margin term in loss\n",
    "classification_term = tf.reduce_mean(tf.maximum(0., tf.subtract(1., tf.multiply(model_output, y_target))))\n",
    "\n",
    "# Put terms together\n",
    "loss = tf.add(classification_term, tf.multiply(alpha, l2_norm))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Creat the prediction function, optimization algorithm, and initialize the variables."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Declare prediction function\n",
    "prediction = tf.sign(model_output)\n",
    "accuracy = tf.reduce_mean(tf.cast(tf.equal(prediction, y_target), tf.float32))\n",
    "\n",
    "# Declare optimizer\n",
    "my_opt = tf.train.GradientDescentOptimizer(0.01)\n",
    "train_step = my_opt.minimize(loss)\n",
    "\n",
    "# Initialize variables\n",
    "init = tf.global_variables_initializer()\n",
    "sess.run(init)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we can start the training loop."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Step #100 A = [[ 0.39967626]\n",
      " [-2.6207933 ]], b = [[0.18049824]]\n",
      "Loss = [0.12077285]\n",
      "Step #200 A = [[ 0.39387468]\n",
      " [-2.6138687 ]], b = [[0.17316492]]\n",
      "Loss = [0.09857223]\n",
      "Step #300 A = [[ 0.3890632]\n",
      " [-2.6079767]], b = [[0.16524829]]\n",
      "Loss = [0.12168951]\n",
      "Step #400 A = [[ 0.38899034]\n",
      " [-2.6008427 ]], b = [[0.15624833]]\n",
      "Loss = [0.0918275]\n",
      "Step #500 A = [[ 0.38665223]\n",
      " [-2.5962734 ]], b = [[0.1475816]]\n",
      "Loss = [0.11340417]\n"
     ]
    }
   ],
   "source": [
    "# Training loop\n",
    "loss_vec = []\n",
    "train_accuracy = []\n",
    "test_accuracy = []\n",
    "for i in range(500):\n",
    "    rand_index = np.random.choice(len(x_vals_train), size=batch_size)\n",
    "    rand_x = x_vals_train[rand_index]\n",
    "    rand_y = np.transpose([y_vals_train[rand_index]])\n",
    "    sess.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "\n",
    "    temp_loss = sess.run(loss, feed_dict={x_data: rand_x, y_target: rand_y})\n",
    "    loss_vec.append(temp_loss)\n",
    "\n",
    "    train_acc_temp = sess.run(accuracy, feed_dict={\n",
    "        x_data: x_vals_train,\n",
    "        y_target: np.transpose([y_vals_train])})\n",
    "    train_accuracy.append(train_acc_temp)\n",
    "\n",
    "    test_acc_temp = sess.run(accuracy, feed_dict={\n",
    "        x_data: x_vals_test,\n",
    "        y_target: np.transpose([y_vals_test])})\n",
    "    test_accuracy.append(test_acc_temp)\n",
    "\n",
    "    if (i + 1) % 100 == 0:\n",
    "        print('Step #{} A = {}, b = {}'.format(\n",
    "            str(i+1),\n",
    "            str(sess.run(A)),\n",
    "            str(sess.run(b))\n",
    "        ))\n",
    "        print('Loss = ' + str(temp_loss))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we extract the linear coefficients and get the SVM boundary line."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Extract coefficients\n",
    "[[a1], [a2]] = sess.run(A)\n",
    "[[b]] = sess.run(b)\n",
    "slope = -a2/a1\n",
    "y_intercept = b/a1\n",
    "\n",
    "# Extract x1 and x2 vals\n",
    "x1_vals = [d[1] for d in x_vals]\n",
    "\n",
    "# Get best fit line\n",
    "best_fit = []\n",
    "for i in x1_vals:\n",
    "    best_fit.append(slope*i+y_intercept)\n",
    "\n",
    "# Separate I. setosa\n",
    "setosa_x = [d[1] for i, d in enumerate(x_vals) if y_vals[i] == 1]\n",
    "setosa_y = [d[0] for i, d in enumerate(x_vals) if y_vals[i] == 1]\n",
    "not_setosa_x = [d[1] for i, d in enumerate(x_vals) if y_vals[i] == -1]\n",
    "not_setosa_y = [d[0] for i, d in enumerate(x_vals) if y_vals[i] == -1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Matplotlib code for plotting"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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LU8//XTyZjwNVXolhaIicNdAs0jM3J0rr7yS//qv/9qlbP78+bz00kuMGzeOZ599lkcffbTGtiZOnMiMGTPo1q0bAIWFhbz55pu0bt16j2LKyspix44dQM1TXd9333107tyZP//5z2zfvp0WLVrU2O6FF17I3XffzQknnMDAgQP3OK76ll5jConDRCUFkVidfvrpTJkyhbVr1wLBWUrLly+nsLAQd+fCCy9k7NixvP/++wC0bNmSzZs379LOxo0bmTFjBitXrkxOdX3//fczceJE8vLyWL58ebKNTZs2UVFRUe2U1N26dUtOg/Hss89WG3tRUREHH3wwZsYTTzyRnNl00KBBTJgwgbKysp3azc3N5dRTT2XUqFENvusI0i0p/PrXwb9t2sQbh0iaO+aYY7jjjjs4/fTTOfbYYznjjDP46quvWLFiBd/5znfo3bs3V1xxBXfffTcAV1xxBT/60Y92GWh+9tlnGTRoENnZ2cl13//+93n++efJyMhg4sSJXHPNNfTq1YszzjiDrVu3Vjsl9Z133sm1115L//79azwzatSoUYwfP55evXrx+eefJ2/oc8455zB48GDy8/Pp3bs3v//975OvueSSS8jOzua0006r0/cxCpFNnR2VfZo6+ze/gU8/hd/9TolB0oKmzm4Y7rnnHrZu3codd9xRL9trqFNnNzy33hp3BCKSZr73ve+xYsUKXnvttbhDqZX0SgoiIvXshRdeiDuEPZJeYwoiaWh/6yKWfbOvf28lBZFGLCcnh3Xr1ikxpAl3Z926dclrKvZGpN1HZjYY+APBndfGu/s9lcpvBH4ElAOFwJXu/kWUMYmkk06dOrFy5UoKCwvjDkXqSU5ODp06ddrr10eWFMwsExgHDAJWArPNbKq7L0yp9gGQ7+6lZnYNcC8wNKqYRNJNdnY23bt3jzsM2Y9E2X00AChw96Xuvg2YBAxJreDur7t7abg4A9j79CYiIvssyqRwKLAiZXlluK46VwEvRRiPiIjsRoM4JdXMLgXygZOqKR8BjADo0qVLPUYmIpJeokwKq4DOKcudwnU7MbPTgduAk9x9a1UNufujwKNh/UIz29vB6PbA2r187f5K+5wetM/pYV/2uWttKkU2zYWZZQGfAqcRJIPZwMXuviClTh/gGWCwuy+JJJCdY5pTm8u8GxPtc3rQPqeH+tjnyMYU3L0c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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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BMA77riDt912mzfff7lrrrmm3OfYqFGjvP+j7t27c/Xq1ezbt683PyEhgcOHD+dLL73ERx99tMzyw4cP59ixY737ovg+O1tQKFSNPXv20MwIgLGxsXz66ae9B6j4BSSYoXnz5kxLSwuq7a233srbb7+dr7zyCu+4444S81q2bMlOnTqxXr16bNSoUZl/2GeeeYbdu3dnTEwML7300gq3s3btWnbo0CHoffAfWrRoUWbaT3/600qXa9q0aZlpt99++1nV4D/4v8iWHmJiYgK+qPgPN954Y5n7uaL2mZmZHDhwIM8//3xmZGSwRYsWPO+8886o5h49ejA6Ovqc9/1chuI3Bx9++CFjY2PZrl07r5cW7FB6H4YMGcKf/OQnQS8fExMTdLtLLrmkSvf/4YcfrpL1DB48uMpqev755703Cv7DlVdeyddff/2sX8ugUKg6xQ/QE088UeadbIMGDZiYmMixY8fysssu4+jRo713cmbGzp07E/jhMMODDz7I0aNH8/777+fTTz/NefPmcerUqXz99dcJgK+88kqJbR85coSPPPJImSfIQw89xLvuuouLFy/mokWLOGrUqBLzb731Vv79738ngDLhMGrUKE6cOJEkefToUX7xxRfePk6aNImDBg1ip06duHfvXu/da/FwySWX8IYbbuCGDRs4ZMgQRkdH85prrmHv3r0DPsHHjx/PWbNm8aGHHmKrVq286atXr+aGDRu8Q0w9evQgANavX5+bNm3iyJEj2aZNmxLrKn7hvu2227h58+Yy27rwwgsJOD2Sdu3aEQDfeOMN5ufn0+fzeeHzu9/9jr169eKECRP43nvvlVjHTTfdxL179zInJ4f33Xcfb7zxRvbv35+bN29mamoqr7jiCn700UckyU8//dR7wwCA69at88aHDh1KAHzyySeZkpJCABw5cqQ3v02bNiTp7UegF8bY2FgCTm9k2bJl7N27N5999ln+6U9/4oMPPshbbrmFAHj//fdz0aJFfO655/j88897y991110EnHfUwA9vYq644grOnz+fH3/8MaOiotimTRv6fD7+9a9/JQCvVwSAHTp08F6I27dvzx//+Mfs0aMH582bx5UrV3qP6VNPPcWMjAxefPHFBJzwHz16dJnn7sqVK5mXl8dVq1YxKiqK9957L3ft2sWnnnqKKSkpnDNnjnc/vf322yV6XX36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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "# Plot data and line\n",
    "plt.plot(setosa_x, setosa_y, 'o', label='I. setosa')\n",
    "plt.plot(not_setosa_x, not_setosa_y, 'x', label='Non-setosa')\n",
    "plt.plot(x1_vals, best_fit, 'r-', label='Linear Separator', linewidth=3)\n",
    "plt.ylim([0, 10])\n",
    "plt.legend(loc='lower right')\n",
    "plt.title('Sepal Length vs Pedal Width')\n",
    "plt.xlabel('Pedal Width')\n",
    "plt.ylabel('Sepal Length')\n",
    "plt.show()\n",
    "\n",
    "# Plot train/test accuracies\n",
    "plt.plot(train_accuracy, 'k-', label='Training Accuracy')\n",
    "plt.plot(test_accuracy, 'r--', label='Test Accuracy')\n",
    "plt.title('Train and Test Set Accuracies')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend(loc='lower right')\n",
    "plt.show()\n",
    "\n",
    "# Plot loss over time\n",
    "plt.plot(loss_vec, 'k-')\n",
    "plt.title('Loss per Generation')\n",
    "plt.xlabel('Generation')\n",
    "plt.ylabel('Loss')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
